#本makefile用来将本目录下所有的c和cpp编译成.o，然后生成本目录同名静态库，放到build目录。并且递归编译子目录。
DIR_NAME := $(lastword $(subst /, ,$(shell pwd))) # 本目录名
OUT_LIB = ../build/lib$(strip $(DIR_NAME)).a # 输出的静态库文件

SUBDIRS := $(wildcard */) # 遍历所有子目录
SRCS := $(wildcard *.c) # 遍历所有c文件
OBJS := $(SRCS:.c=.o) # 替换文件后缀
SRCS_CPP := $(wildcard *.cpp) # 遍历所有cpp文件
OBJS_CPP := $(SRCS_CPP:.cpp=.o) # 替换文件后缀

CFLAGS := -Wall -Werror -Wshadow -g -fpic -I./
LDFLAGS := -lpthread

all:
	$(MAKE) $(OBJS) $(OBJS_CPP)
	for dir in $(SUBDIRS); do \
		$(MAKE) -C $$dir -j1 all || exit $$?; \
	done
	$(AR) -rcs $(OUT_LIB) $(OBJS) $(OBJS_CPP)

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

%.o: %.cpp
	$(CXX) $(CFLAGS) -c $< -o $@

clean:
	for dir in ${SUBDIRS}; do \
		$(MAKE) -C $$dir clean || exit $$?; \
	done
	rm -f $(OBJS) $(OBJS_CPP) $(OUT_LIB)
